[2010–09–17] SmtpMailer konečně přímo v Nette
- David Grudl
- Nette Core | 8212
SmtpMailer konečně nativní součástí frameworku.
use Nette\Mail\Mail
Nette\Mail\SmtpMailer;
$mail = new Mail;
$mail->setMailer(new SmtpMailer(array(
'host' => 'smtp.gmail.com',
'username' => 'franta@gmail.com',
'password' => '*****',
'secure' => 'ssl',
)));
$mail->setFrom('John Doe <doe@example.com>');
$mail->addTo('Lady Jane <jane@example.com>');
$mail->setSubject('Hello Jane!');
$mail->setBody('Have a nice day!');
$mail->send();
p.s. díky všem tvůrcům rozšíření, které tuto chybějící část tak dlouho suplovali a možná svým lepším mailerem budou i nadále suplovat ;-)
- Patrik Votoček
- Člen | 2221
já se naopak té koule na noze rád zbavím. :-) ale bylo by dobré mít možnost Mailer nastavit v konfigu.
- kravčo
- Člen | 721
vrtak-cz napsal(a):
… bylo by dobré mít možnost Mailer nastavit v konfigu.
Myslím, že možnosti na to sú:
mailing_script.php
$mail = new Mail;
$mail->setMailer(Environment::getService('Nette\Mail\IMailer'));
bootstrap.php
Mail::$defaultMailer = Environment::getService('Nette\Mail\IMailer');
- Patrik Votoček
- Člen | 2221
Já jsem líný programátor proto něco jako tohle:
$mail->setMailer(Environment::getService('Nette\Mail\IMailer'));
// nebo
Mail::$defaultMailer = Environment::getService('Nette\Mail\IMailer');
psát nechci. Bohužel jsem ve vlaku na GPRS jinak bych našel vlákno kde davídek tuhle feature sliboval…
- viktorc
- Člen | 21
Na vyber mailera v Mail pomocou config staci upravit Mail::getMailer nejako takto:
<?php
public function getMailer()
{
if ($this->mailer === NULL) {
try {
$this->mailer = Environment::getService('Nette\\Mail\\IMailer');
} catch (InvalidStateException $e) {
if ($a = strrpos(self::$defaultMailer, '\\')) self::$defaultMailer = substr(self::$defaultMailer, $a + 1); // fix namespace
$this->mailer = is_object(self::$defaultMailer) ? self::$defaultMailer : new self::$defaultMailer;
}
}
return $this->mailer;
}
?>
a do config.ini potom staci napisat
<?php
service.Nette-Mail-IMailer = SmtpMailer
?>
Prednost bude mat samozrejme explicitne nastaveny mailer cez $mail->setMailer(), potom config:service.Nette-Mail-IMailer a najnizsiu prioritu Mail::$defaultMailer.
Dalsia drobnost je podpora konfiguracie samotneho SmtpMailera z config.ini. Staci doplnit na zaciatok jeho konstruktora:
<?php
public function __construct(array $options = array())
{
if (empty($options))
$options=Environment::getConfig('smtpmailer');
if ($options['host']) {
....
?>
Parametre ako uzivatelske meno a heslo pre SMTP autentikaciu napises raz (do config.ini) a v programe robis len to, co naozaj treba.
Slo by to doplnit (takto, ci nejako podobne) ak do Nette?